import javax.swing.DefaultListModel;

 /** 
 * Implementa l'interfaccia Algorithm e definisce alcuni comportamenti di base.
 * Questa classe non definisce alcun algoritmo vero e proprio, e quindi  
 * rimane astratta.  
 * 
 * @author Massimiliano Ferretti matricola 79769 
 */
 
 
 public abstract class AlgorithmBase 
  implements Algorithm
  {
    /**
     * Nodo sorgente dal quale far partire l'algoritmo
     */         
    protected Node source;
    
    /**
     * Elenco dei nodi presenti nel grafo su cui eseguire l'algoritmo.
     */         
    protected Node[] nodes;

    /**
     * Elenco degli archi presenti nel grafo su cui eseguire l'algoritmo.
     */         
    protected Arc[] arcs;
    private DefaultListModel output;
    
    /**
     * Traccia il log aggiungendo la stringa di testo passata come parametro 
     * all'elenco di stringhe utilizzato come output.
     * Viene effettuato il controllo che l'output non sia null.      
     * @param text Testo di log da aggiungere all'output         
     */         
    protected void log(String text)
    {
      if(output != null)
        output.addElement(text);
    }
 
    public void initialize(Graph graph, DefaultListModel output)
    {
      nodes = graph.getNodes();
      arcs = graph.getArcs();
      source = graph.getSelectedNode();
      this.output = output;
      
      // Imposta tutte le distanze ad infinito 
      for(Node node : nodes)
      {
        node.setDistanceToInfinite();
        node.setPrevious(null);
      }     
      // La sorgente ha distanza 0
      source.setDistance(0);
    }                            
  }